﻿using AppForm_Managers.Object_Entities;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AppForm_Managers.Views
{
    public partial class PositionForm : Form
    {
        public PositionForm()
        {
            InitializeComponent();
        }

        private void PositionForm_Load(object sender, EventArgs e)
        {
            UpdateButton.Enabled = false;
            DeleteButton.Enabled = false;
            AddButton.Enabled = true;

            GridPositions_Load(sender, e);
        }

        private void GridPositions_Load(object sender, EventArgs e)
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                GridPositions.DataSource = db.Postions.ToList();
            }
        }

        private void ViewPositions_Click(object sender, EventArgs e)
        {
            ErrorProvider.Dispose();

            List<int> listSelected = ViewPositions.GetSelectedRows().ToList<int>();
            int index = -1;
            foreach (var item in listSelected)
            {
                if (item > -1)
                {
                    index = item;
                    break;
                }
            }

            if (index > -1)
            {
                UpdateButton.Enabled = true;
                DeleteButton.Enabled = true;
                AddButton.Enabled = false;

                CodeText.Text = ViewPositions.GetRowCellValue(index, "CodePost").ToString();
                NameText.Text = ViewPositions.GetRowCellValue(index, "NameOfPost").ToString();
                DesText.Text = ViewPositions.GetRowCellValue(index, "Descriptons").ToString();
                CheckStatus.Checked = bool.Parse(ViewPositions.GetRowCellValue(index, "StatusOfPost").ToString());
            }
        }

        private void Controls_Reset()
        {
            CodeText.Text = "";
            NameText.Text = "";
            DesText.Text = "";
            CheckStatus.Checked = false;
        }

        private void AddButton_Click(object sender, EventArgs e)
        {
            ErrorProvider.Dispose();

            if (CodeText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(CodeText, "Mã chức vụ không được bỏ trống");
                CodeText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();


            if (NameText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(NameText, "Tên chức vụ không được bỏ trống");
                NameText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (DesText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(DesText, "Mô tả chức vụ không được bỏ trống");
                DesText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            ManagerEmployeesEntities db = new ManagerEmployeesEntities();
            try
            {
                Postion postion = new Postion()
                {
                    CodePost = CodeText.Text.Trim(),
                    NameOfPost = NameText.Text.Trim(),
                    Descriptons = DesText.Text.Trim(),
                    StatusOfPost = CheckStatus.Checked
                };

                db.Postions.Add(postion);
                db.SaveChanges();

                Controls_Reset();
                GridPositions_Load(sender, e);

                AlertControl.Show(this, "Hệ thống thông báo", "Thêm mới vị trí chức vụ của nhân viên thành công");
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau", "Thống báo hệ thống", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
            }
            finally
            {
                db.Dispose();
            }
        }

        private void UpdateButton_Click(object sender, EventArgs e)
        {
            ErrorProvider.Dispose();

            if (CodeText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(CodeText, "Mã chức vụ không được bỏ trống");
                CodeText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();


            if (NameText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(NameText, "Tên chức vụ không được bỏ trống");
                NameText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (DesText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(DesText, "Mô tả chức vụ không được bỏ trống");
                DesText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            List<int> listSelected = ViewPositions.GetSelectedRows().ToList<int>();
            int index = -1;
            foreach (var item in listSelected)
            {
                if (item > -1)
                {
                    index = item;
                    break;
                }
            }

            ManagerEmployeesEntities db = new ManagerEmployeesEntities();
            if (index > -1)
            {
                int id = Int32.Parse(ViewPositions.GetRowCellValue(index, "PosID").ToString());

                try
                {
                    Postion postion = db.Postions.Single(p => p.PosID == id);

                    postion.CodePost = CodeText.Text.Trim();
                    postion.NameOfPost = NameText.Text.Trim();
                    postion.Descriptons = DesText.Text.Trim();
                    postion.StatusOfPost = bool.Parse(CheckStatus.Checked.ToString());

                    DialogResult show = MessageBox.Show("Bạn có muốn cập nhật thông tin của chức vụ đã chọn", "Cập nhật chức vụ", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (show == System.Windows.Forms.DialogResult.Yes)
                    {
                        db.SaveChanges();

                        Controls_Reset();
                        GridPositions_Load(sender, e);
                        AddButton.Enabled = true;
                        UpdateButton.Enabled = false;
                        DeleteButton.Enabled = false;

                        AlertControl.Show(this, "Hệ thống thông báo", "Cập nhật thông tin chức vụ thành công");
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Hệ thống đang bận, hãy thử lại sau", "Thống báo hệ thống", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                }
                finally
                {
                    db.Dispose();
                }
            }
        }

        private void DeleteButton_Click(object sender, EventArgs e)
        {
            NotiLable.Text = "";
            NotiLable.Visible = false;
            ErrorProvider.Dispose();

            List<int> listSelected = ViewPositions.GetSelectedRows().ToList<int>();
            int index = -1;
            foreach (var item in listSelected)
            {
                if (item > -1)
                {
                    index = item;
                    break;
                }
            }

            ManagerEmployeesEntities db = new ManagerEmployeesEntities();
            if (index > -1)
            {
                int id = Int32.Parse(ViewPositions.GetRowCellValue(index, "PosID").ToString());

                try
                {
                    Postion postion = db.Postions.Single(p => p.PosID == id);
                    db.Postions.Remove(postion);

                    DialogResult show = MessageBox.Show("Bạn có muốn xóa chức vụ đã chọn", "Xóa chức vụ", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                    if (show == System.Windows.Forms.DialogResult.Yes)
                    {
                        db.SaveChanges();

                        Controls_Reset();
                        GridPositions_Load(sender, e);
                        AddButton.Enabled = true;
                        UpdateButton.Enabled = false;
                        DeleteButton.Enabled = false;

                        AlertControl.Show(this, "Thông báo hệ thống", "Xóa thành công chức vụ đã chọn");
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Hệ thống đang bận, hãy thử lại sau", "Thống báo hệ thống", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                }
                finally
                {
                    db.Dispose();
                }
            }
        }

        private void CancelsButton_Click(object sender, EventArgs e)
        {
            DialogResult show = MessageBox.Show("Bạn có muốn hủy bỏ thao tác đã chọn và làm mới không?", "Hủy bỏ thao tác", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (show == DialogResult.Yes)
            {
                ErrorProvider.Dispose();

                Controls_Reset();

                UpdateButton.Enabled = false;
                DeleteButton.Enabled = false;
                AddButton.Enabled = true;

                GridPositions_Load(sender, e);
            }
        }
    }
}